﻿#include<iostream>
#include <vector>
using namespace std;

//超出时间限制
int minSubArrayLen1(int target, vector<int>& nums)
{
	int ret = INT_MAX;
	int n = nums.size();
	// 枚举出所有满⾜和⼤于等于 target 的⼦数组[start, end]
	// 由于是取到最⼩，因此枚举的过程中要尽量让数组的⻓度最⼩
    // 枚举开始位置
	for (int start = 0; start < n; start++)
	{
		int sum = 0; // 记录从这个位置开始的连续数组的和
		// 寻找结束位置
		for (int end = start; end < n; end++)
		{
			sum += nums[end]; // 将当前位置加上

			if (sum >= target) // 当这段区间内的和满⾜条件时
			{
				// 更新结果，start 开头的最短区间已经找到
				ret = min(ret, end - start + 1);
				break;
			}
		}
	}
	// 返回最后结果
	return ret == INT_MAX ? 0 : ret;
}

int minSubArrayLen(int target, vector<int>& nums)
{
	int left = 0;
	int right = 0;
	int sum = 0;
	int len = INT_MAX;
	int n = nums.size();
	for (; right < n; right++)
	{
		//进窗口
		sum += nums[right];
		//判断
		while (sum >= target)
		{
			//更新结果
			len = min(len,right - left + 1);
			//出窗口
			sum -= nums[left];
			left++;
		}
	}
	return len == INT_MAX ? 0 : len;
}

int main()
{
	vector<int> n = { 2,3,1,2,4,3 };
	int ret = minSubArrayLen(7, n);
	cout << ret << endl;
	return 0;
}
